package ioc

import (
	"context"
	"time"

	"github.com/spf13/viper"
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"
)

// MongoDBConfig MongoDB配置结构
type MongoDBConfig struct {
	URI      string `json:"uri"`
	Database string `json:"database"`
}

// NewMongoDB 创建并返回MongoDB数据库实例
func NewMongoDB() *mongo.Database {
	// 创建默认配置
	var cfg MongoDBConfig

	// 尝试从配置文件加载MongoDB配置
	err := viper.UnmarshalKey("mongodb", &cfg)
	if err != nil {
		// 如果配置中没有找到mongodb部分，使用默认值
		cfg.URI = "mongodb://localhost:27017"
		cfg.Database = "fable_script"
	}

	// 创建上下文，设置超时时间
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()

	// 创建MongoDB客户端
	client, err := mongo.Connect(ctx, options.Client().ApplyURI(cfg.URI))
	if err != nil {
		panic(err)
	}

	// 测试连接
	err = client.Ping(ctx, nil)
	if err != nil {
		panic(err)
	}

	// 返回指定的数据库实例
	return client.Database(cfg.Database)
}
